home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / ada / gwuada_9.zip / PREDEF.ADA < prev    next >
Text File  |  1992-02-07  |  25KB  |  750 lines

  1. -- 
  2. -- 
  3. --               ********************************** 
  4. --               *                                *  
  5. --               *           T  e  x  t           * 
  6. --               *                                *  
  7. --               *     Input / Output  Package    * 
  8. --         *                  *
  9. --         *         and other          *
  10. --         *                  *
  11. --         *        Predefined Units      *
  12. --               *                                *  
  13. --               *                                *  
  14. --         *         ADA Project      *
  15. --         *      Courant Institute      *
  16. --         *     New York University      *
  17. --         *      251 Mercer Street,      *
  18. --         *      New York, NY 10012      *
  19. --               *                                *  
  20. --               ********************************** 
  21. -- 
  22. -- 
  23. --
  24. pragma page;
  25. --  This file contains several of the predefined Ada package spec-
  26. --  ifications.  They do not actually implement the package's
  27. --  operations, which are coded in the implementation language C,
  28. --  but they provide an interface to them through the standard 
  29. --  procedure/function calling mechanism. The predefined packages are:
  30. --
  31. --      . The SYSTEM package.
  32. --
  33. --      . The IO_EXCEPTIONS package.
  34. --
  35. --      . The generic SEQUENTIAL_IO package.
  36. --
  37. --      . The generic DIRECT_IO package.
  38. -- 
  39. --      . The TEXT_IO package.  
  40. --
  41. --    . The CALENDAR package and the predefined subprograms 
  42. --      UNCHECKED_CONVERSION and UNCHECKED_DEALLOCATION.
  43. --
  44. --
  45. pragma page;
  46.  
  47. package SYSTEM is
  48.  
  49.    type NAME    is (ELXSI_BSD, ELXSI_ENIX, PC_DOS, 
  50.              SUN_UNIX, VAX_UNIX, VAX_VMS) ; 
  51.  
  52.    SYSTEM_NAME  : constant NAME := SUN_UNIX;
  53.    STORAGE_UNIT : constant      := 32;
  54.    MEMORY_SIZE  : constant      := 2**16 - 1;
  55.  
  56.    -- System Dependent Named Numbers:
  57.  
  58.    MIN_INT      : constant      := -2**31;
  59.    MAX_INT      : constant      :=  2**31-1;
  60.    MAX_DIGITS   : constant      := 6;
  61.    MAX_MANTISSA : constant      := 31;
  62.    FINE_DELTA   : constant      := 2.0**(-30);
  63.    TICK         : constant      := 0.01;
  64.  
  65.    -- Other System Dependent Declarations
  66.  
  67.    subtype PRIORITY is INTEGER range 1 .. 4;
  68.  
  69.    type SEGMENT_TYPE is new INTEGER range 0..255;
  70.    type OFFSET_TYPE  is new INTEGER range 0..32767;
  71.    type ADDRESS is record
  72.         SEGMENT : SEGMENT_TYPE := SEGMENT_TYPE'LAST;
  73.         OFFSET  : OFFSET_TYPE  := OFFSET_TYPE'LAST;
  74.    end record;
  75.  
  76.    SYSTEM_ERROR : exception;
  77.  
  78. end SYSTEM;
  79.  
  80. package IO_EXCEPTIONS is
  81.  
  82.    STATUS_ERROR : exception;
  83.    MODE_ERROR   : exception;
  84.    NAME_ERROR   : exception;
  85.    USE_ERROR    : exception;
  86.    DEVICE_ERROR : exception;
  87.    END_ERROR    : exception;
  88.    DATA_ERROR   : exception;
  89.    LAYOUT_ERROR : exception;
  90.  
  91. end IO_EXCEPTIONS;
  92.  
  93. pragma page;
  94. with IO_EXCEPTIONS;
  95. generic
  96.     type ELEMENT_TYPE is private;
  97.  
  98. package SEQUENTIAL_IO is
  99.  
  100.     type FILE_TYPE is limited private;
  101.     
  102.     type FILE_MODE is (IN_FILE, OUT_FILE);
  103.       
  104.  
  105.     -- File management
  106.  
  107.  
  108.     procedure CREATE   (FILE : in out FILE_TYPE;
  109.                         MODE : in FILE_MODE := OUT_FILE;
  110.                         NAME : in STRING    := "";
  111.                         FORM : in STRING    := "");
  112.     pragma IO_interface(CREATE,SIO_CREATE,ELEMENT_TYPE);
  113.  
  114.     procedure OPEN     (FILE : in out FILE_TYPE;
  115.                         MODE : in FILE_MODE;
  116.                         NAME : in STRING;
  117.                         FORM : in STRING := "");
  118.     pragma IO_interface(OPEN,SIO_OPEN,ELEMENT_TYPE);
  119.  
  120.     procedure CLOSE    (FILE : in out FILE_TYPE);
  121.     pragma IO_interface(CLOSE,SIO_CLOSE);
  122.  
  123.     procedure DELETE   (FILE : in out FILE_TYPE);
  124.     pragma IO_interface(DELETE,SIO_DELETE);
  125.  
  126.     procedure RESET    (FILE : in out FILE_TYPE; MODE : in  FILE_MODE);
  127.     pragma IO_interface(RESET,SIO_RESET_MODE,ELEMENT_TYPE);
  128.     procedure RESET    (FILE : in out FILE_TYPE);
  129.     pragma IO_interface(RESET,SIO_RESET,ELEMENT_TYPE);
  130.  
  131.     function  MODE     (FILE : in FILE_TYPE)  return FILE_MODE;
  132.     pragma IO_interface(MODE,SIO_MODE);
  133.  
  134.     function  NAME     (FILE : in FILE_TYPE)  return STRING;
  135.     pragma IO_interface(NAME,SIO_NAME);
  136.  
  137.     function  FORM     (FILE : in FILE_TYPE)  return STRING;
  138.     pragma IO_interface(FORM,SIO_FORM);
  139.     
  140.     function  IS_OPEN  (FILE : in FILE_TYPE)  return BOOLEAN;
  141.     pragma IO_interface(IS_OPEN,SIO_IS_OPEN);
  142.  
  143.     -- Input and Output Operations:
  144.  
  145.     procedure READ   (FILE : in FILE_TYPE; ITEM : out ELEMENT_TYPE);
  146.     pragma IO_interface(READ,SIO_READ,ELEMENT_TYPE);
  147.  
  148.     procedure WRITE  (FILE : in FILE_TYPE; ITEM : in ELEMENT_TYPE);
  149.     pragma IO_interface(WRITE,SIO_WRITE,ELEMENT_TYPE);
  150.  
  151.     function  END_OF_FILE(FILE : in FILE_TYPE) return BOOLEAN;
  152.     pragma IO_interface(END_OF_FILE,SIO_END_OF_FILE);
  153.  
  154.     -- Exceptions:
  155.  
  156.     STATUS_ERROR : exception renames IO_EXCEPTIONS.STATUS_ERROR;
  157.     MODE_ERROR   : exception renames IO_EXCEPTIONS.MODE_ERROR;
  158.     NAME_ERROR     : exception renames IO_EXCEPTIONS.NAME_ERROR;
  159.     USE_ERROR     : exception renames IO_EXCEPTIONS.USE_ERROR;
  160.     DEVICE_ERROR : exception renames IO_EXCEPTIONS.DEVICE_ERROR;
  161.     END_ERROR     : exception renames IO_EXCEPTIONS.END_ERROR;
  162.     DATA_ERROR     : exception renames IO_EXCEPTIONS.DATA_ERROR;
  163.  
  164. private
  165.  
  166.     UNINITIALIZED: constant := 0;
  167.     type FILE_TYPE is record
  168.                          FILENUM: INTEGER := UNINITIALIZED; 
  169.                       end record;
  170.  
  171. end SEQUENTIAL_IO;
  172.  
  173. package body SEQUENTIAL_IO is
  174. end SEQUENTIAL_IO;
  175.  
  176. pragma page;
  177. with IO_EXCEPTIONS;
  178. generic
  179.     type ELEMENT_TYPE is private;
  180.  
  181. package DIRECT_IO is
  182.  
  183.     type  FILE_TYPE  is limited private;
  184.  
  185.     type    FILE_MODE       is (IN_FILE, INOUT_FILE, OUT_FILE);
  186.     type    COUNT           is range 0 .. INTEGER'LAST;
  187.     subtype POSITIVE_COUNT  is COUNT range 1 .. COUNT'LAST;    
  188.       
  189.  
  190.     -- File management
  191.  
  192.  
  193.     procedure CREATE   (FILE : in out FILE_TYPE;
  194.                         MODE : in FILE_MODE := INOUT_FILE;
  195.                         NAME : in STRING := "";
  196.                         FORM : in STRING := "");
  197.     pragma IO_interface(CREATE,DIO_CREATE,ELEMENT_TYPE);
  198.  
  199.     procedure OPEN     (FILE : in out FILE_TYPE;
  200.                         MODE : in FILE_MODE;
  201.                         NAME : in STRING;
  202.                         FORM : in STRING := "");
  203.     pragma IO_interface(OPEN,DIO_OPEN,ELEMENT_TYPE);
  204.  
  205.     procedure CLOSE    (FILE : in out FILE_TYPE);
  206.     pragma IO_interface(CLOSE,DIO_CLOSE);
  207.  
  208.     procedure DELETE   (FILE : in out FILE_TYPE);
  209.     pragma IO_interface(DELETE,DIO_DELETE);
  210.  
  211.     procedure RESET    (FILE : in out FILE_TYPE; MODE : in  FILE_MODE);
  212.     pragma IO_interface(RESET,DIO_RESET_MODE,ELEMENT_TYPE);
  213.     procedure RESET    (FILE : in out FILE_TYPE);
  214.     pragma IO_interface(RESET,DIO_RESET,ELEMENT_TYPE);
  215.  
  216.     function  MODE     (FILE : in FILE_TYPE)  return FILE_MODE;
  217.     pragma IO_interface(MODE,DIO_MODE);
  218.  
  219.     function  NAME     (FILE : in FILE_TYPE)  return STRING;
  220.     pragma IO_interface(NAME,DIO_NAME);
  221.  
  222.     function  FORM     (FILE : in FILE_TYPE)  return STRING;
  223.     pragma IO_interface(FORM,DIO_FORM);
  224.     
  225.     function  IS_OPEN  (FILE : in FILE_TYPE)  return BOOLEAN;
  226.     pragma IO_interface(IS_OPEN,DIO_IS_OPEN);
  227.  
  228.     -- Input and Output Operations:
  229.  
  230.     procedure READ   (FILE : in FILE_TYPE; ITEM : out ELEMENT_TYPE);
  231.     pragma IO_interface(READ,DIO_READ,ELEMENT_TYPE);
  232.     procedure READ   (FILE : in FILE_TYPE; ITEM : out ELEMENT_TYPE;
  233.                                            FROM : in POSITIVE_COUNT);
  234.     pragma IO_interface(READ,DIO_READ_FROM,ELEMENT_TYPE);
  235.  
  236.     procedure WRITE  (FILE : in FILE_TYPE;  ITEM : in ELEMENT_TYPE);
  237.     pragma IO_interface(WRITE,DIO_WRITE,ELEMENT_TYPE);
  238.     procedure WRITE  (FILE : in FILE_TYPE;  ITEM : in ELEMENT_TYPE;
  239.                                             TO   : in POSITIVE_COUNT);
  240.     pragma IO_interface(WRITE,DIO_WRITE_TO,ELEMENT_TYPE);
  241.  
  242.     procedure SET_INDEX(FILE : in FILE_TYPE; TO :in POSITIVE_COUNT);
  243.     pragma IO_interface(SET_INDEX,DIO_SET_INDEX);
  244.    
  245.     function  INDEX    (FILE : in FILE_TYPE)  return POSITIVE_COUNT;
  246.     pragma IO_interface(INDEX,DIO_INDEX);
  247.  
  248.     function  SIZE     (FILE : in FILE_TYPE)  return COUNT;
  249.     pragma IO_interface(SIZE,DIO_SIZE);
  250.       
  251.     function  END_OF_FILE(FILE : in FILE_TYPE) return BOOLEAN;
  252.     pragma IO_interface(END_OF_FILE,DIO_END_OF_FILE);
  253.  
  254.     -- Exceptions:
  255.  
  256.     STATUS_ERROR : exception renames I